home *** CD-ROM | disk | FTP | other *** search
/ Die Speccy' 97 / Die Speccy' 97.iso / amiga_system / the_aminet / comm / bbs / amms20d.lha / amms / menu / File-Direct.bat < prev    next >
DOS Batch File  |  1995-04-12  |  20KB  |  644 lines

  1. ;    $VER: 1.11 / 12.04.1995
  2. ; File-Direktanwahl
  3. ; -----------------
  4. ; Im Menu ist Command-Bit 6 gesetzt. Deshalb kann der User definiert
  5. ; auf Befehle zugreifen, auf die er normalerweise keinen Zugriff hat.
  6. ; Die Variable COM wird zum Erkennen von Fehlern benutzt. Tritt ein
  7. ; Fehler auf, so wird in die Routine SAVE_ERROR verzweigt, die den Fehler
  8. ; im File mbdat:menu.err protokolliert.
  9. ; Die Variable JUMP wird zum eventuellen Sprung von einem Untermenue zum
  10. ; anderen benutzt, ohne das Hauptmenue dazwischen aufzurufen. In dieser
  11. ; Variable muss dann das entsprechende Label des Untermenues stehen.
  12. ; Soll kein Schnell-Wechsel stattfinden, so darf die Variable JUMP nicht
  13. ; geaendert werden.
  14. ;
  15.  
  16. ;
  17. ; **** File-Direktanwahl
  18. ;
  19. MENU="File-Direct"            ; Name des Menues
  20. COMNAME=MENU                ; WHO-Befehlsname setzen
  21. COM="Menu"                ; Menupunkt in Variable COM speichern
  22. _on error SAVE_ERROR            ; Beim Fehler -> Fehlerbehandlungsrou.
  23.  
  24. ; Variablen definieren
  25.  
  26. F1="#FARBE 1,7#"            ; Farbe fuer nicht angewaehlt
  27. F2="#FARBE 7,1#"            ; Farbe fuer angewaehlt
  28. POS=0                    ; Zuerst 1. Menuepunkt anwaehlen
  29. YS=2                    ; Ab Zeile 2 Menuepunkte ausgeben
  30.  
  31. BF1="#FARBE 5,7#"            ; Farbe fuer nicht angewaehlt
  32. BF2="#FARBE 7,5#"            ; Farbe fuer angewaehlt
  33. BPOS=0                    ; Zuerst 1. Board anwaehlen
  34.  
  35. ; Alle Directories als Menuepunkte und weitere Menuepunkte einlesen
  36. ; und ausgeben
  37.  
  38. _echo/nolf "#RESET##HOME##CLS#"        ; Bildschirm loeschen
  39. _gosub GETDIRS                ; Dirs als Menuepunkte einlesen und ausgeben
  40.  
  41. I=MC                    ; Alte Menuepunktanzahl retten
  42. _disk execute/keep "menu:'{alanguage}'/file-direct.bat" ; Zusatz-Menuepunkte holen
  43. _gosub PSCREEN                ; Rest-Menuepunkte ausgeben
  44.  
  45. _disk text "menu:'{alanguage}'/file-direct.txt" ; Menuetext ausgeben
  46.  
  47. F=F2                    ; Aktiv-Farbe in F
  48. INDEX=POS                ; Aktuellen Menuepunkt in INDEX
  49. _gosub PMENU                ; Aktiv-Menuepunkt ausgeben
  50. _goto CMENU                ; -> Waehlen im Menue
  51.  
  52. ; Menuetext ausgeben und Tasten abfragen
  53.  
  54. MENU:
  55. _echo/nolf "#RESET##HOME##CLS#"        ; Bildschirm loeschen
  56. I=0                    ; Alle Menuepunkt ausgeben
  57. _gosub PSCREEN                ; Alle Menuepunkte ausgeben
  58. _disk text "menu:'{alanguage}'/file-direct.txt" ; Menuetext ausgeben
  59. ;_goto CMENU                ; -> Waehlen im Menue
  60.  
  61.  
  62. ; ***********
  63. ; *
  64. ; * Funktion: Ein Menuepunkt im Menue auswaehlen.
  65. ; *          - Wechsel der Menuepunkte mit den Cursortasten
  66. ; *          - Anwahl eines Menuepunktes mit der Taste RETURN
  67. ; *          - Ende mit der Taste Q
  68. ; *          - Befehlsebene mit der Taste B
  69. ; *          - Das Labelfeld Lx dient zum Ansprung der einzelnen
  70. ; *        Unterroutinen bei der Anwahl eines Menuepunktes.
  71. ; *        Bei den Brettern steht ein B fuer den Sprung zum
  72. ; *        Label CMENU_B. Die anderen Menuepunkte springen
  73. ; *        zu den Labeln CMENU_'Lx' ('Lx' = Inhalt des Labels).
  74. ; *
  75. ; * Name  : CMENU
  76. ; *
  77. ; * Input : Mx = Feld mit Menuepunkten (M0, M1, M2 usw.)
  78. ; *        MC = Anzahl der Menuepunkte
  79. ; *        POS = Akt. Menuepunkt des Users (0 bis MC-1).
  80. ; *        F1 = Farbstring : Menuepunkt nicht aktuell
  81. ; *        F2 = Farbstring : Menuepunkt aktuell
  82. ; *        YS = Zeilennummer, wo Menue beginnt
  83. ; *
  84. ; * Output: keine
  85. ; *
  86. ; * Zusatzvariablen : X,Y,N
  87. ; *
  88. CMENU:
  89. COM="Menu"                ; Menupunkt in Variable COM speichern
  90. _menu/noecho "" -            ; Tasten abfragen
  91.  "^1" CMENU_UP -
  92.  "^2" CMENU_DOWN -
  93.  "^3" CMENU_LEFT -
  94.  "^4" CMENU_RIGHT -
  95.  "^M" CMENU_GET -            ; Menuepunkt zum Lesen anwaehlen
  96.  "^R" MENU -                ; Bildschirm refreshen
  97.  "B" CMENU_CLI -                ; Befehlsebene
  98.  "Q" CMENU_EXIT                ; Ende des Menues
  99.  
  100. ;
  101. ; ** Ende
  102. ;
  103. CMENU_EXIT:
  104. _goto END                ; -> Ende
  105.  
  106. ;
  107. ; **** Rueckkehr in die Befehlsebene
  108. ;
  109. CMENU_CLI:
  110. COM="CLI"                ; Menupunkt setzen
  111. JUMP=="CLI"                ; Einsprunglabel im Main-Menue setzen
  112. _goto END                ; -> Ende der Batchdatei
  113.  
  114. ;
  115. ; ** Cursor HOCH
  116. ;
  117. CMENU_UP:
  118. COM="CMENU_UP"                ; Menupunkt setzen
  119. INDEX=POS                ; Alte Position merken
  120. _if/i POS < 3 then POS=POS-(((POS+(MC-1)/3*3))/MC)*3+(MC+2)/3*3
  121.                     ; Bei Unterlauf -> Letzte Zeile
  122. POS=POS-3                ; Neue Position errechnen
  123. _gosub CMENU_PRINT            ; Menuepunkt optisch wechseln
  124. _goto CMENU                ; -> Neue Taste abfragen
  125.  
  126. ;
  127. ; ** Cursor RUNTER
  128. ;
  129. CMENU_DOWN:
  130. COM="CMENU_DOWN"            ; Menupunkt setzen
  131. INDEX=POS                ; Alte Position merken
  132. POS=POS+3                ; Neue Position errechnen
  133. _if/i POS >= MC then POS=POS%3        ; Bei Unterlauf -> Erste Zeile
  134. _gosub CMENU_PRINT            ; Menuepunkt optisch wechseln
  135. _goto CMENU                ; -> Neue Taste abfragen
  136.  
  137. ;
  138. ; ** Cursor LINKS
  139. ;
  140. CMENU_LEFT:
  141. COM="CMENU_LEFT"            ; Menupunkt setzen
  142. INDEX=POS                ; Alte Position merken
  143. _if/i (POS+2)/3*3 != (POS+3)/3*3 then POS=POS+3-(((POS+3)/MC)*(2-(MC-1)%3))
  144.                     ; Bei Unterlauf -> Letzte Spalte
  145. POS=POS-1                ; Neue Position errechnen
  146. _gosub CMENU_PRINT            ; Menuepunkt optisch wechseln
  147. _goto CMENU                ; -> Neue Taste abfragen
  148.  
  149. ;
  150. ; ** Cursor RECHTS
  151. ;
  152. CMENU_RIGHT:
  153. COM="CMENU_RIGHT"            ; Menupunkt setzen
  154. INDEX=POS                ; Alte Position merken
  155. _if/i (POS+1)/3*3+(POS+1)/MC > POS/3*3 then POS=POS/3*3-1
  156.                     ; Bei Spaltenueberlauf -> Erste Spalte
  157. POS=POS+1                ; Neue Position errechnen
  158. _gosub CMENU_PRINT            ; Menuepunkt optisch wechseln
  159. _goto CMENU                ; -> Neue Taste abfragen
  160.  
  161. ;
  162. ; ***** UNTERROUTINE : Wechsel eines Menuepunktes
  163. ; Input: INDEX = Alte Position
  164. ;     POS = Neue Position
  165. CMENU_PRINT:
  166. F=F1                    ; Loesch-Farbe setzen
  167. _gosub PMENU                ; Alten Menuepunkt inaktiv ausgeben
  168. INDEX=POS
  169. F=F2                    ; Setz-Farbe setzen
  170. _gosub PMENU                ; Neuen Menuepunkt aktiv ausgeben
  171. _return                    ; Ende
  172.  
  173. ;
  174. ; ** Menuepunkt anwaehlen
  175. ;
  176. CMENU_GET:
  177. COM="CMENU_GET"                ; Menupunkt setzen
  178. N=L'POS'                ; Sprunglabel in N
  179. _goto CMENU_'N'                ; Sprung in Unterroutine
  180.  
  181. ;
  182. ; ** Ein Directory listen / Board auswaehlen
  183. ;
  184. CMENU_B:
  185. COM="CMENU_B"                ; Menupunkt setzen
  186.  
  187. N=M'POS'                ; Directoryname holen
  188. _cd :                    ; Ins Root-Directory
  189. _cd "'N'"                ; In Directory wechseln
  190.  
  191. ; Alle Bretter aus dem Directory auslesen
  192. BC=-1                    ; Anzahl der Boards initialisieren
  193. N=""                    ; Ab erstem Boards suchen
  194. CMENU_B_LOOP:
  195. BC=BC+1                    ; Boardanzahl erhoehen
  196. _get dir/fboards "'N'" N        ; Naechstes Board suchen
  197. BM'BC'=N                ; Boardname speichern
  198. _if N != "" then _goto CMENU_B_LOOP    ; Board vorhanden ? Ja -> weiter suchen
  199.  
  200. _disk execute/keep "menu:'{alanguage}'/file-direct-b.bat" ; Zusatz-Menuepunkte holen
  201.  
  202. BY=YS+MC/3+4                ; Oberste Menuezeile errechnen
  203. I=0                    ; Alle Boards ausgeben
  204. BPOS=0                    ; Cursor auf ersten Menuepunkt
  205. _echo/nolf "#RESET##SETLINE 'BY'##CLB#"    ; Unteren Bildschirm loeschen
  206. _gosub PALLBOARDS            ; Menue aufbauen
  207. _disk text "menu:'{alanguage}'/file-direct-b.txt" ; Menuetext ausgeben
  208. _goto CBOARD                ; -> Boards auswaehlen
  209.  
  210.  
  211.  
  212. ; ***********
  213. ; *
  214. ; * Funktion: Ein Menuepunkt im Menue ausgeben.
  215. ; *
  216. ; * Name  : PMENU
  217. ; *
  218. ; * Input : Mx = Feld mit Menuepunkten (M0, M1, M2 usw.)
  219. ; *        INDEX = Akt. Menuepunkt des Users (0 bis MC-1).
  220. ; *        F = Farbstring
  221. ; *        YS = Zeilennummer, wo Menue beginnt
  222. ; *
  223. ; * Output: keine
  224. ; *
  225. ; * Zusatzvariablen : X,Y,N
  226. ; *
  227. PMENU:
  228. X=(INDEX-INDEX/3*3)*26+1        ; Spalte X errechnen
  229. Y=INDEX/3+YS                ; Zeile Y errechnen
  230. N=M'INDEX'                ; Menuepunkt holen
  231. _echo/nolf "#SETPOS 'Y','X'#'F'{LIMSPACEON}{TAB 26}{LIMSPACEOFF}#LEFT 26#'N'"
  232. ;_echo/nolf "#SETPOS 'Y','X'#'F''N'"    ; Menuepunkt ausgeben
  233. _return                    ; Ende
  234.  
  235.  
  236. ; ***********
  237. ; *
  238. ; * Funktion: Mehere Menuepunkte auf dem Bildschirm ausgeben.
  239. ; *
  240. ; * Name  : PSCREEN
  241. ; *
  242. ; * Input : Mx = Feld mit Menuepunkten (M0, M1, M2 usw.)
  243. ; *        POS = Akt. Menuepunkt des Users (0 bis MC-1).
  244. ; *        MC = Anzahl der Menuepunkte
  245. ; *        F1 = Farbstring : Menuepunkt nicht aktuell
  246. ; *        F2 = Farbstring : Menuepunkt aktuell
  247. ; *        YS = Zeilennummer, wo Menue beginnt
  248. ; *        I = Menuepunktnummer, ab der die Ausgabe beginnen soll.
  249. ; *        Wenn I > 0, dann sollten zuvor die anderen Menuepunkte
  250. ; *        zuvor ausgegeben sein.
  251. ; *
  252. ; * Output: I = MC
  253. ; *
  254. ; * Zusatzvariablen : F,X,Y,N
  255. ; *
  256. PSCREEN:
  257. X=(I-I/3*3)*26+1            ; Spalte X errechnen
  258. Y=I/3+YS                ; Zeile Y errechnen
  259. _if/i I == MC then _goto PSCREEN_END    ; Ende erreicht ? JA -> Ende
  260. N=M'I'                    ; Menuepunkt holen
  261. F=F1                    ; Farbe setzen
  262. _if/i I == POS then F=F2        ; Akt. Menuepunkt ? Ja, Farbe aendern
  263. _echo/nolf "#SETPOS 'Y','X'#'F'{LIMSPACEON}{TAB 26}{LIMSPACEOFF}#LEFT 26#'N'"
  264. ;_echo/nolf "#SETPOS 'Y','X'#'F''N'"    ; Menuepunkt ausgeben
  265. I=I+1                    ; Feldnummer auf naechsten Menuepunkt
  266. _goto PSCREEN                ; -> Naechsten Menuepunkt ausgeben
  267.  
  268. PSCREEN_END:
  269. _if/i X == 27 then -            ; Zwei Spalten noch ausgeben ?
  270.    _echo/nolf "#SETPOS 'Y','X'#'F1'{LIMSPACEON}{TAB 52}{LIMSPACEOFF}"
  271. _if/i X == 53 then -            ; Eine Spalte noch ausgeben ?
  272.    _echo/nolf "#SETPOS 'Y','X'#'F1'{LIMSPACEON}{TAB 26}{LIMSPACEOFF}"
  273. _return                    ; Ende
  274.  
  275.  
  276. ; ***********
  277. ; *
  278. ; * Funktion: Alle Directories, die Boards enthalten, als Menuepunkte
  279. ; *          einlesen. Die Variablen DIRx, Lx und MC sind GLOBAL !!
  280. ; *          Die Directories werden ausgegeben !
  281. ; *
  282. ; * Name  : GETDIRS
  283. ; *
  284. ; * Input : keine
  285. ; *
  286. ; * Output: Mx = Feld mit Menuepunkten (M0, M1, M2 usw.)
  287. ; *        Lx = Feld mit Labeln (L0, L1, L2 usw.)
  288. ; *        MC = Anzahl der gefundenen Directories
  289. ; *        YS = Zeilennummer, wo Menue beginnt
  290. ; *
  291. ; * Zusatzvariablen : LE,N,Nx,X,Y
  292. ; *
  293. GETDIRS:
  294. MC=0                    ; Anzahl der Dirs initilisieren
  295. LE=0                    ; Rekursions-Level initialisieren
  296. _cd :                    ; Alle Directories ab dem Root-Dir
  297.  
  298. ; Pruefe, ob Root-Directory Boards enthaelt
  299.  
  300. _get dir/fboard "" N            ; Existiert Board in Directory ?
  301. _if N == "" then _goto GETDIRS_RE    ; Nein -> Unterdirectories suchen
  302.  
  303. ; Root-Directory enthaelt Boards : Menuepunkt ausgeben
  304.  
  305. M'MC'=":"                ; Root-Directoryname speichern
  306. L'MC'="B"                ; Label B wie Board zum Menuepunkt setzen
  307. X=(MC-MC/3*3)*26+1            ; Spalte X errechnen
  308. Y=MC/3+YS                ; Zeile Y errechnen
  309. _echo/nolf "#SETPOS 'Y','X'#'F1'{LIMSPACEON}{TAB 26}{LIMSPACEOFF}#LEFT 26#:"
  310. ;_echo/nolf "#SETPOS 'Y','X'#'F''N'"    ; Menuepunkt ausgeben
  311. MC=MC+1                    ; Anzahl der Menuepunkte erhoehen
  312.  
  313. ; Rekursionsroutine starten
  314.  
  315. GETDIRS_RE:
  316. N'LE'=""                ; Leerstring fuer ersten Eintrag
  317.  
  318. GETDIRS_LOOP:
  319. _get dir/dir/fboard N'LE' N        ; Dirname einlesen
  320. _if N == "" then _return        ; kein weitere Name -> Ende
  321.  
  322. N'LE'=N                    ; Dirname wegen Rekursion speichern
  323. M'MC'="'{PATH}''N'"            ; Dirname in Menuepunkt speichern
  324. L'MC'="B"                ; Label B wie Board zum Menuepunkt setzen
  325.  
  326. ; Pruefe, ob Directory Boards enthaelt
  327.  
  328. _cd "'N'"                ; Wechsel ins Unterdirectory
  329. _get dir/fboard "" N            ; Existiert Board in Directory ?
  330. _if N == "" then _goto GETDIRS_NEXT    ; Nein -> Unterdirectories suchen
  331.  
  332. ; Directory enthaelt Boards : Menuepunkt ausgeben
  333.  
  334. X=(MC-MC/3*3)*26+1            ; Spalte X errechnen
  335. Y=MC/3+YS                ; Zeile Y errechnen
  336. N=M'MC'                    ; Menuepunkt holen
  337. _echo/nolf "#SETPOS 'Y','X'#'F1'{LIMSPACEON}{TAB 26}{LIMSPACEOFF}#LEFT 26#'N'"
  338. ;_echo/nolf "#SETPOS 'Y','X'#'F''N'"    ; Menuepunkt ausgeben
  339. MC=MC+1                    ; Anzahl der Menuepunkte erhoehen
  340.  
  341. ; Unterdirectories durchsuchen
  342.  
  343. GETDIRS_NEXT:
  344. LE=LE+1                    ; Rekursionslevel erhoehen
  345. _gosub GETDIRS_RE            ; Unterdirectories durchsuchen
  346. LE=LE-1                    ; Rekursionslevel erniedrigen
  347. _cd /                    ; Ein Directory zurueck
  348.  
  349. _goto GETDIRS_LOOP            ; -> Naechstes Directory suchen
  350.  
  351.  
  352.  
  353. ; ***********
  354. ; *
  355. ; * Funktion: Ein Board im Boardmenue auswaehlen.
  356. ; *          - Wechsel der Menuepunkte mit den Cursortasten
  357. ; *          - Anwahl eines Menuepunktes mit der Taste RETURN
  358. ; *          - Ende mit der Taste Q
  359. ; *          - Befehlsebene mit der Taste B
  360. ; *
  361. ; * Name  : CBOARD
  362. ; *
  363. ; * Input : BMx = Feld mit Menuepunkten (BM0, NM1, BM2 usw.)
  364. ; *        BPOS = Akt. Menuepunkt des Users (0 bis BC-1).
  365. ; *        BF1 = Farbstring : Menuepunkt nicht aktuell
  366. ; *        BF2 = Farbstring : Menuepunkt aktuell
  367. ; *        BY = Zeilennummer, wo Menue beginnt
  368. ; *
  369. ; * Output: keine
  370. ; *
  371. ; * Zusatzvariablen : X,Y,N
  372. ; *
  373. CBOARD:
  374. T=0                    ; Bildschirm nicht geloescht signal.
  375. CBOARD1:
  376. COM="Choose Board"            ; Menupunkt in Variable COM speichern
  377. _menu/noecho "" -            ; Tasten abfragen
  378.  "^1" CBOARD_UP -
  379.  "^2" CBOARD_DOWN -
  380.  "^3" CBOARD_LEFT -
  381.  "^4" CBOARD_RIGHT -
  382.  "^M" CBOARD_FILES -            ; Menuepunkt zum Files anwaehlen
  383.  "^R" CBOARD_REFRESH -            ; Bildschirm refreshen
  384.  "B" CBOARD_CLI -            ; Befehlsebene
  385.  "M" CBOARD_MARK -            ; Board in Liste ein-/austragen
  386.  "Q" CBOARD_EXIT -            ; Ende des Menues
  387.  "F" CBOARD_FILES -            ; Menuepunkt zum Files anwaehlen
  388.  "U" CBOARD_UPLOAD            ; Menuepunkt zum Upload anwaehlen
  389.  
  390.  
  391. ;
  392. ; ** Ende
  393. ;
  394. CBOARD_EXIT:
  395. Y=(MC-1)/3+YS                ; Letzte Zeile des Dir-Menues errechnen
  396. _echo/nolf "#RESET##SETLINE 'BY'##CLB##SETLINE 'Y'#" ; Board-Menu loeschen
  397. _disk text "menu:'{alanguage}'/file-direct.txt" ; Menuetext ausgeben
  398. _goto CMENU                ; -> Menue
  399.  
  400. ;
  401. ; ** Bildschirm neu aufbauen
  402. ;
  403. CBOARD_REFRESH:
  404. _echo/nolf "#RESET##HOME##CLS#"        ; Bildschirm loeschen
  405. I=0                    ; Alle Menuepunkt ausgeben
  406. _gosub PSCREEN                ; Alle Menuepunkte ausgeben
  407. _disk text "menu:'{alanguage}'/file-direct.txt" ; Menuetext ausgeben
  408. I=0                    ; Alle Boards ausgeben
  409. _gosub PALLBOARDS            ; Menue aufbauen
  410. _disk text "menu:'{alanguage}'/file-direct-b.txt" ; Menuetext ausgeben
  411. _goto CBOARD                ; -> Neue Taste abfragen
  412.  
  413. ;
  414. ; **** Board in Boardliste ein-/austragen
  415. ;
  416. CBOARD_MARK:
  417. COM="CBOARD_MARK"            ; Menupunkt setzen
  418. _if/i {LEVEL} <= GUESTLEVEL then _goto CBOARD1 ; Wenn Gast -> Taste ignorieren
  419. _if/i BPOS >= BC-2 then _goto CBOARD1    ; Exit-Menuepunkt ? Ja -> Taste ignorieren
  420.  
  421. N=BM'BPOS'                ; Boardname holen
  422. _check fboard/boardlist "'N'" CBOARD_T    ; Board in Boardliste ? Nein -> verzw.
  423. _files/action=106 "'N'"            ; Board aus Boardliste austragen
  424. INDEX=BPOS
  425. F=BF2                    ; Setz-Farbe setzen
  426. _gosub PBOARD                ; Menuepunkt neu ausgeben
  427. _goto CBOARD1                ; -> Neue Taste abfragen
  428.  
  429. CBOARD_T:
  430. _files/action=105 "'N'"            ; Board in Boardliste aufnehmen
  431. INDEX=BPOS
  432. F=BF2                    ; Setz-Farbe setzen
  433. _gosub PBOARD                ; Menuepunkt neu ausgeben
  434. _goto CBOARD1                ; -> Neue Taste abfragen
  435.  
  436. ;
  437. ; **** Rueckkehr in die Befehlsebene
  438. ;
  439. CBOARD_CLI:
  440. COM="CLI"                ; Menupunkt setzen
  441. JUMP=="CLI"                ; Einsprunglabel im Main-Menue setzen
  442. _goto END                ; -> Ende der Batchdatei
  443.  
  444. ;
  445. ; ** Board lesen
  446. ;
  447. CBOARD_FILES:
  448. COM="CBOARD_FILES"            ; Menupunkt setzen
  449. _if/i BPOS == BC-2 then _goto CBOARD_EXIT ; Exit-Menuepunkt ? Ja -> Ende
  450. _if/i BPOS == BC-1 then _goto CBOARD_CLI ; CLI-Menuepunkt ? Ja -> CLI
  451.  
  452. N=BM'BPOS'                ; Boardname holen
  453. _check fboard/acc=16 "'N'" CBOARD1    ; Falls kein Board-Zugriff -> Taste ignorieren
  454. T=1                    ; Bildschirm geloescht signalisieren
  455. _echo/nolf "#RESET##HOME##CLS#"        ; Bildschirm loeschen
  456. _files "'N'"                ; Files anschauen
  457. _goto CBOARD_REFRESH            ; -> Bildschirm refreshen
  458.  
  459. ;
  460. ; ** Batch-Upload
  461. ;
  462. CBOARD_UPLOAD:
  463. COM="CBOARD_UPLOAD"            ; Menupunkt setzen
  464. _if/i BPOS >= BC-2 then _goto CBOARD1    ; Exit-Menuepunkt ? Ja -> Taste ignorieren
  465.  
  466. N=BM'BPOS'                ; Boardname holen
  467. _check fboard/acc=2 "'N'" CBOARD1    ; Falls kein Upload-Zugriff -> Taste ignorieren
  468. T=1                    ; Bildschirm geloescht signalisieren
  469. _echo/nolf "#RESET##HOME##CLS#"        ; Bildschirm loeschen
  470. _batch upload "'N'"            ; Batchupload
  471. _goto CBOARD_REFRESH            ; -> Bildschirm refreshen
  472.  
  473. ;
  474. ; ** Cursor HOCH
  475. ;
  476. CBOARD_UP:
  477. COM="CBOARD_UP"                ; Menupunkt setzen
  478. INDEX=BPOS                ; Alte Position merken
  479. _if/i BPOS < 3 then BPOS=BPOS-(((BPOS+(BC-1)/3*3))/BC)*3+(BC+2)/3*3
  480.                     ; Bei Unterlauf -> Letzte Zeile
  481. BPOS=BPOS-3                ; Neue Position errechnen
  482. _gosub CBOARD_PRINT            ; Menuepunkt optisch wechseln
  483. _goto CBOARD1                ; -> Neue Taste abfragen
  484.  
  485. ;
  486. ; ** Cursor RUNTER
  487. ;
  488. CBOARD_DOWN:
  489. COM="CBOARD_DOWN"            ; Menupunkt setzen
  490. INDEX=BPOS                ; Alte Position merken
  491. BPOS=BPOS+3                ; Neue Position errechnen
  492. _if/i BPOS >= BC then BPOS=BPOS%3    ; Bei Unterlauf -> Erste Zeile
  493. _gosub CBOARD_PRINT            ; Menuepunkt optisch wechseln
  494. _goto CBOARD1                ; -> Neue Taste abfragen
  495.  
  496. ;
  497. ; ** Cursor LINKS
  498. ;
  499. CBOARD_LEFT:
  500. COM="CBOARD_LEFT"            ; Menupunkt setzen
  501. INDEX=BPOS                ; Alte Position merken
  502. _if/i (BPOS+2)/3*3 != (BPOS+3)/3*3 then BPOS=BPOS+3-(((BPOS+3)/BC)*(2-(BC-1)%3))
  503.                     ; Bei Unterlauf -> Letzte Spalte
  504. BPOS=BPOS-1                ; Neue Position errechnen
  505. _gosub CBOARD_PRINT            ; Menuepunkt optisch wechseln
  506. _goto CBOARD1                ; -> Neue Taste abfragen
  507.  
  508. ;
  509. ; ** Cursor RECHTS
  510. ;
  511. CBOARD_RIGHT:
  512. COM="CBOARD_RIGHT"            ; Menupunkt setzen
  513. INDEX=BPOS                ; Alte Position merken
  514. _if/i (BPOS+1)/3*3+(BPOS+1)/BC > BPOS/3*3 then BPOS=BPOS/3*3-1
  515.                     ; Bei Spaltenueberlauf -> Erste Spalte
  516. BPOS=BPOS+1                ; Neue Position errechnen
  517. _gosub CBOARD_PRINT            ; Menuepunkt optisch wechseln
  518. _goto CBOARD1                ; -> Neue Taste abfragen
  519.  
  520.  
  521. ;
  522. ; ***** UNTERROUTINE : Wechsel eines Menuepunktes
  523. ; Input: INDEX = Alte Position
  524. ;     BPOS = Neue Position
  525. CBOARD_PRINT:
  526. F=BF1                    ; Loesch-Farbe setzen
  527. _gosub PBOARD                ; Alten Menuepunkt inaktiv ausgeben
  528. INDEX=BPOS
  529. F=BF2                    ; Setz-Farbe setzen
  530. _gosub PBOARD                ; Neuen Menuepunkt aktiv ausgeben
  531. _return                    ; Ende
  532.  
  533.  
  534. ; ***********
  535. ; *
  536. ; * Funktion: Ein Menuepunkt im Menue ausgeben.
  537. ; *
  538. ; * Name  : PBOARD
  539. ; *
  540. ; * Input : BMx = Feld mit Menuepunkten (BM0, BM1, NM2 usw.)
  541. ; *        INDEX = Akt. Menuepunkt des Users (0 bis BC-1).
  542. ; *        F = Farbstring
  543. ; *        BY = Zeilennummer, wo Menue beginnt
  544. ; *
  545. ; * Output: keine
  546. ; *
  547. ; * Zusatzvariablen : X,Y,N
  548. ; *
  549. PBOARD:
  550. X=(INDEX-INDEX/3*3)*26+1        ; Spalte X errechnen
  551. Y=INDEX/3+BY                ; Zeile Y errechnen
  552. N=BM'INDEX'                ; Menuepunkt holen
  553. M=" "                    ; Board nicht in Boardliste
  554. _check fboard/boardlist "'N'" PBOARD_PRINT
  555. M="*"                    ; Board in Boardliste
  556. PBOARD_PRINT:
  557. _echo/nolf "#SETPOS 'Y','X'#'F'{LIMSPACEON}{TAB 26}{LIMSPACEOFF}#LEFT 26#'M' 'N'"
  558. _return                    ; Ende
  559.  
  560.  
  561. ; ***********
  562. ; *
  563. ; * Funktion: Mehere Menuepunkte auf dem Bildschirm ausgeben.
  564. ; *
  565. ; * Name  : PALLBOARDS
  566. ; *
  567. ; * Input : BMx = Feld mit Menuepunkten (M0, M1, M2 usw.)
  568. ; *        BPOS = Akt. Menuepunkt des Users (0 bis BC-1).
  569. ; *        BC = Anzahl der Menuepunkte
  570. ; *        BF1 = Farbstring : Menuepunkt nicht aktuell
  571. ; *        BF2 = Farbstring : Menuepunkt aktuell
  572. ; *        BY = Zeilennummer, wo Menue beginnt
  573. ; *        I = Menuepunktnummer, ab der die Ausgabe beginnen soll.
  574. ; *        Wenn I > 0, dann sollten zuvor die anderen Menuepunkte
  575. ; *        zuvor ausgegeben sein.
  576. ; *
  577. ; * Output: I = BC
  578. ; *
  579. ; * Zusatzvariablen : F,X,Y,N
  580. ; *
  581. PALLBOARDS:
  582. X=(I-I/3*3)*26+1            ; Spalte X errechnen
  583. Y=I/3+BY                ; Zeile Y errechnen
  584. _if/i I == BC then _goto PALLBOARDS_END    ; Ende erreicht ? JA -> Ende
  585. N=BM'I'                    ; Menuepunkt holen
  586. F=BF1                    ; Farbe setzen
  587. _if/i I == BPOS then F=BF2        ; Akt. Menuepunkt ? Ja, Farbe aendern
  588. M=" "                    ; Board nicht in Boardliste
  589. _check fboard/boardlist "'N'" PALLBOARDS_PRINT
  590. M="*"                    ; Board in Boardliste
  591. PALLBOARDS_PRINT:
  592. _echo/nolf "#SETPOS 'Y','X'#'F'{LIMSPACEON}{TAB 26}{LIMSPACEOFF}#LEFT 26#'M' 'N'"
  593. I=I+1                    ; Feldnummer auf naechsten Menuepunkt
  594. _goto PALLBOARDS            ; -> Naechsten Menuepunkt ausgeben
  595.  
  596. PALLBOARDS_END:
  597. _if/i X == 27 then -            ; Zwei Spalten noch ausgeben ?
  598.    _echo/nolf "#SETPOS 'Y','X'#'BF1'{LIMSPACEON}{TAB 52}{LIMSPACEOFF}"
  599. _if/i X == 53 then -            ; Eine Spalte noch ausgeben ?
  600.    _echo/nolf "#SETPOS 'Y','X'#'BF1'{LIMSPACEON}{TAB 26}{LIMSPACEOFF}"
  601. _return                    ; Ende
  602.  
  603.  
  604.  
  605. ;
  606. ; **** SUBROUTINE: Gib einen Infotext aus und warte auf Taste
  607. ;
  608. WAIT:
  609. COM_OLD=COM                ; Alten Menupunkt retten
  610. COM="WAIT"                ; Neuen Menupunkt setzen
  611. _echo/nolf "^J[RETURN]"            ; Gib Wartemeldung aus
  612. _waitkey " ^M"                ; Warte auf Space oder Return
  613. COM=COM_OLD                ; Alten Menupunkt setzen
  614. _return                    ; Ende der Unterroutine
  615.  
  616.  
  617. ;
  618. ; **** Endroutine
  619. ; **** Diese Routine muss fuer das Beenden des Menues aufgerufen werden.
  620. ;
  621. END:
  622. _eod                    ; Ende
  623.  
  624. ;
  625. ; **** Fehlerbehandlungs-Routine
  626. ;
  627. ; Die Routine erwartet in der Variable COM den Namen des akt. Menupunkts.
  628. ; Sie protokolliert im File mbdat:menu.err die Fehler des Menues.
  629. ;
  630. SAVE_ERROR:
  631. _on error/ignore            ; Alle Fehler ignorieren
  632. _extern echo >>mbdat:menu.err "------------------"
  633. _extern echo >>mbdat:menu.err "Fehler im Menu"
  634. _extern echo >>mbdat:menu.err "Menu : 'MENU'"
  635. _extern echo >>mbdat:menu.err "Punkt: 'COM'"
  636. _extern echo >>mbdat:menu.err "User : '{NAME}'"
  637. _extern echo >>mbdat:menu.err "Datum: '{DATE}'"
  638. _extern echo >>mbdat:menu.err "Zeit : '{TIME}'"
  639. _extern echo >>mbdat:menu.err "------------------"
  640. _disk text "menu:'{ALANGUAGE}'/Error.txt"  ; Fehlertext anzeigen
  641. _waitkey " ^M"
  642. _if COM == "Menu" then _goto END    ; Wenn Fehler im Menue -> Main-Menue
  643. _goto MENU                ; -> Menue
  644.